
系列:30 天打造企業級 PLM|面向:全端|素材:Import 模組(ImportJob)、Part/BOM 匯入通道
「我有三千筆料號要建,總不能一筆一筆敲吧?」批次匯入是上線初期最被依賴的功能。舊資料要進來(Day 23–24 的下游),供應商給的料表要進來,工程師整理的 Excel 也要進來。但它同時是最容易出事的功能。三千筆裡第 1847 筆炸了怎麼辦?匯到一半使用者關瀏覽器了怎麼辦?誰匯的、匯了什麼,三個月後查得到嗎?
一般使用者匯入頁與管理端 Part/BOM 匯入通道實機畫面:

以前在 Oracle Agile PLM 操作批次匯入(Import Wizard)時,使用者常有「如履薄冰」的焦慮感:
Mini-PLM 採用非同步背景工作器(ImportJob)+ SSE 即時進度推播:
幾十筆同步處理沒問題;幾千筆讓瀏覽器掛著等 HTTP 回應,等到的多半是 timeout。所以 apply 走非同步:API 立即回 jobId,實際工作進 ImportJob 背景執行,前端輪 progress 或收 SSE,使用者可以自由切換分頁或關閉瀏覽器。
「一筆錯全部不進」聽起來嚴謹,實務上是折磨。三千筆修一筆重傳一次,永遠傳不完。Mini-PLM 選擇分塊處理加錯誤列清單:壞的跳過、好的進去,結束後給「成功 2953 / 失敗 47 + 每筆原因」的結果報告,使用者修 47 筆重傳就好。例外是遷移通道的結構性資料(BOM 父子關聯),父件失敗子件必須跟著跳,錯誤有連鎖語意。
Excel 欄位 → 系統欄位(Day 4 的 metadata 又出現了)的對應設定可以存成 profile 重用。供應商每月給同格式的料表,對應設一次就好。匯入設定本身也是資料,跟 Day 11 trigger 的哲學一致。
上傳檔案 → 解析驗證(同步,快)→ 預覽差異
→ apply(非同步):ImportJob 建立
→ 分塊處理(每塊 N 筆,塊完成即更新進度)
→ 進度持久化(job 狀態存 DB,不是存記憶體)
→ SSE 推進度(Day 19 的通道)+完成全域通知
→ 匯入歷史落檔(誰、何時、檔名、成功/失敗筆數)
設計上有兩件事特別要顧:
$REVISION 語意支援「表單驅動開新版」(接 Day 13 的機制),搬遷含版本歷程的走 Part/BOM Migration 專用通道三段式當安全帶,背景任務加進度持久化撐起大批量,錯誤清單策略顧可用性,稽核表單收口負責問責。批次匯入把這幾件事做齊,上線初期就能少接很多支援電話。明日 Day 27:一套程式支援兩種資料庫——PostgreSQL 與 Oracle 並存的血淚全集。